"""qwen_api_key
配置管理模块
统一管理项目配置，支持环境变量和配置文件
"""
from typing import Optional
from pydantic_settings import BaseSettings
from pydantic import Field


class Settings(BaseSettings):
    """应用配置类"""

    # 应用基础配置
    app_name: str = Field(default="数据需求分析智能体", description="应用名称")
    app_version: str = Field(default="1.0.0", description="应用版本")
    debug_mode: bool = Field(default=False, description="调试模式")

    # API配置
    api_host: str = Field(default="0.0.0.0", description="API服务地址")
    api_port: int = Field(default=8000, description="API服务端口")
    api_prefix: str = Field(default="/api/v1", description="API路径前缀")

    # 大模型配置
    llm_provider: str = Field(default="qwen", description="大模型提供商")
    openai_api_key: Optional[str] = Field(default=None, description="OpenAI API密钥")
    openai_base_url: Optional[str] = Field(default=None, description="OpenAI API基础URL")
    qwen_api_key: Optional[str] = Field(default="sk-697e50133d3f47ab828ac03a78835529", description="通义千问API密钥")
    deepseek_api_key: Optional[str] = Field(default="sk-7a6991ae291840c6aede9e70766c0702", description="DeepSeek API密钥")
    claude_api_key: Optional[str] = Field(default=None, description="Claude API密钥")
    glm_api_key: Optional[str] = Field(default=None, description="GLM API密钥")
    model_name: str = Field(default="qwen-plus", description="默认模型名称")
    max_tokens: int = Field(default=2000, description="最大token数量")
    temperature: float = Field(default=0.7, description="模型温度参数")

    # 思考摘要与日志控制
    log_think: bool = Field(default=True, description="是否记录模型思考/推理摘要")
    think_log_char_limit: int = Field(default=800, description="思考日志最大字符数(截断)")
    think_max_tokens: int = Field(default=300, description="生成思考摘要的最大token")
    think_temperature: float = Field(default=0.2, description="思考摘要生成的温度")
    # 可选：单独指定用于思考摘要的模型名（为空则沿用默认模型）
    think_model_name: Optional[str] = Field(default=None, description="生成思考摘要使用的模型名称(为空则与主模型一致)")
    # 是否记录供应商返回的原生reasoning（如支持），默认为False，仅记录我们生成的思考摘要
    log_provider_reasoning: bool = Field(default=False, description="是否记录模型原生reasoning内容")

    # 知识库配置
    knowledge_base_path: Optional[str] = Field(default=None, description="知识库文件路径")
    embedding_model: str = Field(default="text-embedding-ada-002", description="嵌入模型")

    # 数据库配置
    database_url: Optional[str] = Field(default=None, description="数据库连接URL")

    # 日志配置
    log_level: str = Field(default="INFO", description="日志级别")
    log_file_path: str = Field(default="logs/app.log", description="日志文件路径")
    log_rotation: str = Field(default="1 day", description="日志轮转周期")
    log_retention: str = Field(default="30 days", description="日志保留时间")

    # Redis配置（可选，用于会话管理）
    redis_url: Optional[str] = Field(default=None, description="Redis连接URL")

    # 文件上传配置
    max_file_size: int = Field(default=10*1024*1024, description="最大文件大小(字节)")  # 10MB
    allowed_file_types: list = Field(
        default=["txt", "pdf", "doc", "docx", "xlsx", "csv"],
        description="允许上传的文件类型"
    )

    # 解析日志及报告的位置配置
      # 新增的文件路径配置
    log_files_directory: str = Field(
        default="D:\\AI\\code\\ETL_agent\\app\\logs\\user\\",
        description="思考、操作、规划等日志文件存储目录"
    )
    log_files_re_directory: str = Field(
        default="D:\\AI\\code\\ETL_agent\\",
        description="当前报告存储路径"
    )

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"
        case_sensitive = False


# 全局配置实例
settings = Settings()


def get_settings() -> Settings:
    """获取配置实例"""
    return settings
